iT邦幫忙

2024 iThome 鐵人賽

DAY 23
1
AI/ ML & Data

dbt 修煉之路系列 第 23

dbt 自動化檢查 - dbt Operator

  • 分享至 

  • xImage
  •  

繼上一篇介紹如何透過 Jinja 模板產生報告的 Generator 模組,本篇要來介紹負責產生檢查報告資料的 Operators 模組

Operators 模組由三個主要部分組成:

  1. dbt_operator
  2. git_diff_operator
  3. bigquery_operator

本文將重點介紹 dbt_operator,這是整個檢查過程中最關鍵的部分。

dbt Operator

主要功能

dbt_operator 的核心功能包括:

  1. 檢索需要檢查的 models
  2. 獲取 models 的屬性

檢索 Models

dbt_operator 能夠識別以下幾類 models:

  • 異動的 models
  • 異動 models 的下游 models
  • 與異動 models 相關的 exposures
  • 被停用的 models
  • 使用了異動 macros 的 models

獲取 Models 屬性

對於每個 model,dbt_operator 能夠提取以下關鍵屬性:

  • alias:對應 BigQuery 中的表名
  • schema:對應 BigQuery 中的 dataset
  • database:對應 BigQuery 中的 project
  • materialized:表示 model 在 BigQuery 中的形式(table、view 或 UDF)

實作細節

利用 dbt Python API

dbt 1.5 以上版本提供了 Python API,可以直接在 Python 中調用 DBT 命令。這大大簡化了自動化過程。

解析 Manifest 文件

要獲取 models 的屬性,我們需要解析 DBT 的 manifest 文件。以下是一個範例:

dbt = dbtRunner()
res: dbtRunnerResult = dbt.invoke(["-q", "parse", "--profiles-dir", "."])

manifest = res.result
for node in manifest.nodes.values():
# 這裡可以訪問每個 model 的屬性# 例如:node.alias, node.database, node.schema 等

使用 dbt ls 命令

dbt ls 命令是檢索特定 models 的強大工具。以下是使用範例:

# 撈取 SQL 有異動的 models
dbt ls --select state:modified.body --state base --target-path target
# 撈取有使用異動 macros 的 models
dbt ls --select state:modified.macros --state base --target-path target
# 撈取異動 models 下游 models
dbt ls --select state:modified.body+ --state base --target-path target
# 撈取異動 models 相關 exposure
dbt ls --select state:modified+ --resource-type exposure --state base --target-path target

在 python 上使用 dbtRunner 就能執行同樣的 cli 指令

dbt = dbtRunner()
args = ["-q", "ls", "--models", "state:modified.body",
                "--state", "base",
                "--target-path", "target"
                "--output", "name"]
res: dbtRunnerResult = dbt.invoke(args=args)
result = res.result

dbt_operator 是 pr-check 套件中的核心模組,為後續的檢查過程提供必要的數據。利用 dbt 的 Python API 和 dbt ls 命令,可以識別需要檢查的 models 並獲取它們的屬性。

在下一篇文章中,我們將繼續介紹另一個模組:git_diff_operator。


上一篇
dbt 自動化檢查 - Generator
下一篇
dbt 自動化檢查 - Git Diff Operator
系列文
dbt 修煉之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言